home *** CD-ROM | disk | FTP | other *** search
Java Source | 1996-05-21 | 10.9 KB | 228 lines |
- //****************************************************************************
- // ---- version information ----
- //
- // ComponentPin.java v 1.00 b1
- // Written by: I. van Rienen / E-mail ivr@bart.nl
- // URL: http://www/bart.nl/~ivr
- // Initial release:
- // Released in public domain:
- //
- // ---- Description ----
- // Java class containing methods for a Component Pin
- //
- // This program and the Java source is in the public domain.
- // Permission to use, copy, modify, and distribute this software
- // and its documentation for NON-COMMERCIAL purposes and
- // without fee is hereby granted.
- //
- // Copyright 1996
- //
- // Iwan van Rienen
- // Joan Maetsuyckerstr. 145
- // 2593 ZG The Hague
- // The Netherlands
- //
- // I am not responsible for any bugs in this program and
- // possible damage to hard- or software when using this program.
- //****************************************************************************
- import java.applet.Applet;
- import java.awt.*;
- import java.lang.InterruptedException;
- import java.lang.Integer;
- import java.lang.Math;
- import java.util.Vector;
- import java.io.StreamTokenizer;
- import java.io.InputStream;
- import java.io.IOException;
- import java.net.URL;
-
- class ComponentPin {
- protected Vector ConnComps; // Connected components to this pin
- protected int Level = 0; // level of this pin.
- protected int OldLevel = 0; // Old level of this pin.
- protected Point PinPos; // Position of this pin relative to component
- protected Dimension PinDim; // Dimension of this pin
- protected String Name; // Name of this pin
- protected int Flags; // Flags of this pin
- protected int TextXoffs; // Text x offset
- protected int TextYoffs; // Text y offset
- static final Color PinColor = Color.blue;
- static final Color PinTextColor = Color.white;
- static final int PIN_NORMAL = 0x0000;
- static final int PIN_NEGATIVE = 0x0001;
- static final int PIN_TEXT_INVISIBLE = 0x0002;
- static final int PIN_EDGETRIGGERED = 0x0004;
- static final int PIN_NOACTION = 0x0008;
- public Font PinFont;
- public FontMetrics PinFontMetrics;
-
- //----------------------------------------------------------------------------
- // The constructor of a new component pin
- //----------------------------------------------------------------------------
- public ComponentPin (ComponentPin PinToCopy) {
- Name = PinToCopy.Name;
- PinPos = new Point (PinToCopy.PinPos.x, PinToCopy.PinPos.y);
- PinDim = new Dimension (PinToCopy.PinDim.width, PinToCopy.PinDim.height);
- Flags = PinToCopy.Flags;
- TextXoffs = PinToCopy.TextXoffs;
- TextYoffs = PinToCopy.TextYoffs;
- PinFont = new Font("TimesRoman",Font.PLAIN, 10);
- }
-
- //----------------------------------------------------------------------------
- // The constructor of a new component pin with the specified variables
- //----------------------------------------------------------------------------
- public ComponentPin (String name, int x, int y, int w, int h, int txo, int tyo, int fl) {
- Name = name;
- TextXoffs = txo;
- TextYoffs = tyo;
- PinPos = new Point(x, y);
- PinDim = new Dimension (w, h);
- Flags = fl;
- PinFont = new Font("TimesRoman",Font.PLAIN, 10);
- }
-
- //----------------------------------------------------------------------------
- // Draw this component pin
- //----------------------------------------------------------------------------
- public void draw (Graphics g, int x, int y, int gs) {
- double offset = 0;
- int TextWidth, TextHeight;
- g.setColor (PinColor);
- if ((Flags & PIN_NEGATIVE) > 0) {
- if (PinDim.width > 0) { // pin is left of component
- g.drawLine ((x + PinPos.x) * gs, (y + PinPos.y) * gs,
- (x + PinPos.x + PinDim.width - 1) * gs,
- (y + PinPos.y + PinDim.height) * gs);
- g.setColor (ElectronicComponent.ComponentColor);
- g.drawOval ((int)((x + PinPos.x + PinDim.width - 0.875) * gs),
- (int)((y + PinPos.y - 0.375) * gs), (int)(gs * 0.75), (int)(gs * 0.75));
- } else { // pin is right of component
- g.drawLine ((x + PinPos.x) * gs, (y + PinPos.y) * gs,
- (x + PinPos.x + PinDim.width + 1) * gs,
- (y + PinPos.y + PinDim.height) * gs);
- g.setColor (ElectronicComponent.ComponentColor);
- g.drawOval ((int)((x + PinPos.x + PinDim.width) * gs + 1),
- (int)((y + PinPos.y - 0.375) * gs), (int)(gs * 0.75), (int)(gs * 0.75));
- }
- } else {
- g.drawLine ((x + PinPos.x) * gs, (y + PinPos.y) * gs,
- (x + PinPos.x + PinDim.width) * gs,
- (y + PinPos.y + PinDim.height) * gs);
- }
-
- if ((Flags & PIN_EDGETRIGGERED) > 0) { // Draw >
- offset = 0.5;
- g.setColor (ElectronicComponent.ComponentColor);
- if (PinDim.width > 0) { // pin is left of component
- g.drawLine ((int)((x + PinPos.x + PinDim.width) * gs), (int)((y + PinPos.y - 0.5) * gs),
- (int)((x + PinPos.x + PinDim.width + 0.5) * gs), (int)((y + PinPos.y) * gs) );
- g.drawLine ((int)((x + PinPos.x + PinDim.width) * gs), (int)((y + PinPos.y + 0.5) * gs),
- (int)((x + PinPos.x + PinDim.width + 0.5) * gs), (int)((y + PinPos.y) * gs) );
- } else { // pin is right of component
- g.drawLine ((int)((x + PinPos.x + PinDim.width) * gs), (int)((y + PinPos.y - 0.5) * gs),
- (int)((x + PinPos.x + PinDim.width - 0.5) * gs), (int)((y + PinPos.y) * gs) );
- g.drawLine ((int)((x + PinPos.x + PinDim.width) * gs), (int)((y + PinPos.y + 0.5) * gs),
- (int)((x + PinPos.x + PinDim.width - 0.5) * gs), (int)((y + PinPos.y) * gs) );
-
- }
- }
-
- if ((Flags & PIN_TEXT_INVISIBLE) == 0) {
- PinFontMetrics = g.getFontMetrics(PinFont);
- TextWidth = PinFontMetrics.stringWidth(Name);
- TextHeight = PinFontMetrics.getHeight();
- g.setColor (PinTextColor);
- g.setFont (PinFont);
- if (PinDim.width > 0) { // pin is left of component
- g.drawString (Name, (int)((x + PinPos.x + PinDim.width + offset + TextXoffs) * gs + 2),
- (int)((y + PinPos.y + 0.5 + TextYoffs) * gs));
- if ((Flags & PIN_NEGATIVE) > 0) { // Draw _ above Name
- g.drawLine ( (int)((x + PinPos.x + PinDim.width + offset + TextXoffs) * gs + 2),
- (int)((y + PinPos.y - 0.5 + TextYoffs) * gs ),
- (int)((x + PinPos.x + PinDim.width + offset + TextXoffs) * gs + TextWidth ),
- (int)((y + PinPos.y - 0.5 + TextYoffs) * gs) );
- }
- } else if (PinDim.width < 0) { // pin is right of component
- g.drawString (Name, (int)((x + PinPos.x + PinDim.width - offset + TextXoffs) * gs - TextWidth - 1),
- (int)((y + PinPos.y + 0.5 + TextYoffs) * gs));
- if ((Flags & PIN_NEGATIVE) > 0) { // Draw _ above Name
- g.drawLine ( (int)((x + PinPos.x + PinDim.width - offset + TextXoffs) * gs - TextWidth - 1),
- (int)((y + PinPos.y - 0.5 + TextYoffs) * gs ),
- (int)((x + PinPos.x + PinDim.width - offset + TextXoffs ) * gs ),
- (int)((y + PinPos.y - 0.5 + TextYoffs) * gs));
- }
- } else if (PinDim.height < 0) { // pin is under component
- g.drawString (Name, (int)((x + PinPos.x + TextXoffs) * gs - TextWidth / 2 ),
- (int)((y + PinPos.y + PinDim.height + TextYoffs) * gs));
- if ((Flags & PIN_NEGATIVE) > 0) { // Draw _ above Name
- g.drawLine ( (int)((x + PinPos.x + PinDim.width - offset - 1 + TextXoffs) * gs),
- (int)((y + PinPos.y - 0.5 + TextYoffs) * gs - 1),
- (int)((x + PinPos.x + PinDim.width - offset + TextXoffs) * gs ),
- (int)((y + PinPos.y - 0.5 + TextYoffs) * gs) - 1);
- }
- } else if (PinDim.height > 0) { // pin is above component
- g.drawString (Name, (int)((x + PinPos.x + TextXoffs) * gs - TextWidth / 2 ),
- (int)((y + PinPos.y + PinDim.height + TextYoffs - 1) * gs));
- if ((Flags & PIN_NEGATIVE) > 0) { // Draw _ above Name
- g.drawLine ( (int)((x + PinPos.x + PinDim.width - offset - 1 + TextXoffs) * gs),
- (int)((y + PinPos.y - 0.5 + TextYoffs) * gs - 1),
- (int)((x + PinPos.x + PinDim.width - offset + TextXoffs) * gs ),
- (int)((y + PinPos.y - 0.5 + TextYoffs) * gs) - 1);
- }
- }
- }
- }
-
- //----------------------------------------------------------------------------
- // Get the level of this pin
- //----------------------------------------------------------------------------
- public int getLevel() {
- if ((Flags & PIN_NEGATIVE) == 0) {
- return Level;
- } else {
- if (Level == 0) {
- return 5;
- } else {
- return 0;
- }
- }
- }
-
- //----------------------------------------------------------------------------
- // Get the old level of this pin
- //----------------------------------------------------------------------------
- public int getOldLevel() {
- if ((Flags & PIN_NEGATIVE) == 0) {
- return OldLevel;
- } else {
- if (OldLevel == 0) {
- return 5;
- } else {
- return 0;
- }
- }
- }
-
- //----------------------------------------------------------------------------
- // Set the level of this pin
- //----------------------------------------------------------------------------
- public void setLevel(int l) {
- OldLevel = Level;
- Level = l;
- }
-
- //----------------------------------------------------------------------------
- // Get the name of this pin
- //----------------------------------------------------------------------------
- public String getName() {
- return Name;
- }
-
- //----------------------------------------------------------------------------
- // Set the name of this pin
- //----------------------------------------------------------------------------
- public void setName(String n) {
- Name = n;
- }
- }